package com.ddxz.middleground.master.mapper;

import com.ddxz.middleground.master.entity.MenuPermissionEntity;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * interface description
 *
 * @author 朱宗刚
 * @version 1.0.0
 * @date 2020/8/12
 */

@Mapper
@Repository
public interface MenuPermissionMapper {
    /**
     * 统计使用特定菜单的权限个数
     *
     * @param menuId 菜单标识
     * @param tenant 租户信息
     * @return 权限个数
     */
    Integer getNumByMenuId(@Param("menuId") String menuId, @Param("tenant") String tenant);

    /**
     * 获取与指定权限绑定的菜单标识清单
     *
     * @param permissionId 权限标识
     * @param tenant       租户信息
     * @return 菜单标识清单
     */
    List<MenuPermissionEntity> getMenuIdsByPermissionId(@Param("perId") String permissionId, @Param("tenant") String tenant);

    /**
     * 解除菜单与权限的绑定关系
     *
     * @param permissionId 权限标识
     * @param tenant       租户信息
     * @return 是否解绑成功
     */
    Integer remove(@Param("perId") String permissionId, @Param("tenant") String tenant);

    /**
     * 保存权限与菜单的关联关系
     *
     * @param menuId       菜单标识
     * @param status       状态标识
     * @param permissionId 权限标识
     * @param tenant       租户信息
     * @return 是否保存成功
     */
    Integer mergerGrant(@Param("menuId") String menuId, @Param("status") Integer status, @Param("perId") String permissionId, @Param("tenant") String tenant);

    /**
     * 根据权限清单，获取对应的可用路径清单
     *
     * @param perIdList 权限清单
     * @param tenant    租户信息
     * @return 菜单路径清单
     */
    List<String> getMenuUrlByPermissions(@Param("perIdList") List<String> perIdList, @Param("tenant") String tenant);
}
